public class No017 {
    /**
     * 打印从1到最大的n位数
     * 输入数字n，按顺序打印出从1到最大的n位十进制数。
     * 比如输入3，则打印出1、2、3一直到最大的三位数999。
     */
    public static void main(String[] args) throws Exception {
        Print1ToMaxOfNDigits(1);
    }

    public static void Print1ToMaxOfNDigits(int n) throws Exception {
        if (n < 0) throw new Exception("参数错误");
        char[] number = new char[n];
        for (int i = 0; i < 10; i++) {
            number[0] = (char) (i + '0');
            Print1ToMaxOfNDigitsRecursively(number, n, 0);
        }
    }

    public static void Print1ToMaxOfNDigitsRecursively(char[] number, int n, int index) {
        if (index == n - 1) {
            PrintNum(number);
            return;
        }
        for (int i = 0; i < 10; i++) {
            number[index + 1] = (char) (i + '0');
            Print1ToMaxOfNDigitsRecursively(number, n, index + 1);
        }
    }

    // 不打印首位0
    public static void PrintNum(char[] number) {
        boolean isBeginning = true;
        for (int i = 0; i < number.length; i++) {
            if (isBeginning && number[i] != '0') {
                isBeginning = false;
            }
            if (!isBeginning) System.out.print(number[i]);
        }
        System.out.println();
    }

}
